const fp = require("lodash/fp")
//数据
//horsepower马力，dollar_value 价格，in_stock 库存
const cars = [
    {
        name:'Ferrari FF',
        horsepower:660,
        dollar_value:700000,
        in_stock:true
    },
    {
        name:'Spyker C12 Zagato',
        horsepower:650,
        dollar_value:648000,
        in_stock:false
    },
    {
        name:'Jaguar XKR-S',
        horsepower:550,
        dollar_value:132000,
        in_stock:false
    },
    {
        name:'Audi R8',
        horsepower:525,
        dollar_value:114200,
        in_stock:false
    },
    {
        name:'Aston Martin One-77',
        horsepower:750,
        dollar_value:1850000,
        in_stock:true
    },
    {
        name:'Pagani Huayra',
        horsepower:700,
        dollar_value:1300000,
        in_stock:false
    },
]

//1. 使用函数组合 fp.flowRight() 重新实现

/* let isLastInStock = function(cars){
    let last_car = fp.last(cars);
    return fp.prop('in_stock',last_car);
} */

let isLastInStock = fp.flowRight(fp.prop("in_stock"),fp.last);
//console.log(isLastInStock(cars));

//2. 获取第一个car的name

let getFirstName = fp.flowRight(fp.prop("name"),fp.first)
//console.log(getFirstName(cars));

//3. 使用帮助函数重构  组合方式
let _average = function (xs) {
    return fp.reduce(fp.add,0,xs) / xs.length;
}
/* 
let averageDollarValue = function (cars) {
    let dollar_values = fp.map(function(car){
        return car.dollar_value
    },cars)
    return _average(dollar_values)
}
  */
let averageDollarValue = fp.flowRight(_average,fp.map(car => car.dollar_value));
//console.log(averageDollarValue(cars));

//4. 写一个sanitizeNames()函数  ["Hello World"]  ===> ["hello_world"];

let _underscore = fp.replace(/\W+/g,'_');

let sanitizeNames = fp.flowRight(fp.map(_underscore),fp.map(fp.toLower))
console.log(sanitizeNames(["Hello World"]))
